home *** CD-ROM | disk | FTP | other *** search
- /*
- * GETENV.C
- *
- * (c)Copyright 1992 by Tobias Ferber, All Rights Reserved
- */
-
- #include <stdio.h>
-
- #ifndef AMIGA
- #error "This code will only work on a Commodore Amiga"
- #endif /* AMIGA */
-
- static char rcs_id[]= "$Id: getenv.c,v 1.1 92/02/17 04:12:27 tf Exp $";
-
- #define OFFSET_BEGINNING 0L
- #define OFFSET_END 2L
-
- typedef struct env {
- struct env *next;
- char *name, *value;
- } env;
-
- static env *_envbase= (env *)0L;
-
- char *getenv(const char *varname)
- {
- env *e;
-
- for(e=_envbase; e; e=e->next)
- if(stricmp(varname,e->name)==0)
- break;
-
- if(!e && varname && *varname)
- { char *fname= (char *)malloc( (5+strlen(varname)) * sizeof(char) );
- if(fname)
- { FILE *fp;
- strcpy(fname,"ENV:");
- strcat(fname,varname);
- if(fp= fopen(fname,"r"))
- { long fsize;
- fseek(fp,0L,OFFSET_END);
- fsize= (long)ftell(fp);
- if(fsize>0)
- { char *val= (char *)malloc( (fsize+1) * sizeof(char) );
- if(val)
- { fseek(fp,0L,OFFSET_BEGINNING);
- fread(val, sizeof(char), fsize, fp);
- val[fsize]= '\0';
- if(e= (env *)malloc( sizeof(env) ))
- { e->value= val;
- e->name= (char *)malloc( (1+strlen(varname)) * sizeof(char) );
- if(e->name)
- { strcpy(e->name,varname);
- e->next= _envbase; /* add head */
- _envbase= e;
- }
- else free(e);
- }
- else free(val);
- }
- }
- fclose(fp);
- }
- free(fname);
- }
- }
- #ifdef DEBUG
- if(e) fprintf(stderr,"getenv(\"%s\") = \"%s\"\n",e->name,e->value);
- else fprintf(stderr,"getenv(\"%s\") = (null)\n",varname);
- #endif
- return e ? e->value : (char *)0L;
- }
-
- #ifdef EXPERIMENTAL
- void ungetenv(char *varname)
- {
- if(varname && *varname)
- { env *d= (env *)0L, *e= _envbase;
- while(e && strnicmp(varname,e->name))
- { d= e;
- e= e->next;
- }
- if(e)
- { if(e->name) free(e->name);
- if(e->value) free(e->value);
- if(d) d->next= e->next;
- else _envbase= e->next;
- }
- }
- else /* flush all */
- { env *e= _envbase;
- while(e)
- { env *t= e;
- if(t->name) free(t->name);
- if(t->value) free(t->value);
- e= t->next;
- free(t);
- }
- }
- }
- #endif
-